In-Class Exercise 5

A short description of the post.

Ngah Xin Yan https://github.com/nxinyan/
09-13-2021

Global Setting

Installing and Loading the R package

packages = c('maptools', 'sf', 'raster','spatstat', 'tmap','tidyverse','plotly','ggthemes' )
for (p in packages){
if(!require(p, character.only = T)){
install.packages(p)
}
library(p,character.only = T)
}

Importing the Geospatial Data

Importing shapefile using st_read() of sf package. The output object is in tittle sf object class.

mpsz_sf <- st_read(dsn = "data/shapefile", 
                layer = "MP14_SUBZONE_WEB_PL")
Reading layer `MP14_SUBZONE_WEB_PL' from data source 
  `C:\nxinyan\IS415\IS415_blog-1\_posts\2021-10-26-in-class-exercise-5\data\shapefile' 
  using driver `ESRI Shapefile'
Simple feature collection with 323 features and 15 fields
Geometry type: MULTIPOLYGON
Dimension:     XY
Bounding box:  xmin: 2667.538 ymin: 15748.72 xmax: 56396.44 ymax: 50256.33
Projected CRS: SVY21

Projection is in SVY21

Importing aspatial data from rds folder

read_rds() of readr package is used instead of readRDS() of base R is used. This is because output of read_rds() is in tibble object

childcare <- read_rds("data/rds/childcare.rds")
CHAS <- read_rds("data/rds/CHAS.rds")

Note that there are some data issue in childcare data frame because Lat and Lng should be in numeric data type. The coordinate fields are in decimal degrees. Hence, wgs referencing system is assumed.

Converting the aspatial data frame into sf objects

CHAS_sf <- st_as_sf(CHAS,
                         coords = c("X_COORDINATE",
                                    "Y_COORDINATE"),
                         crs=3414)

Note: st_as_sf accept coordinates in character data type.

childcare_sf <- st_as_sf(childcare,
                         coords = c("Lng",
                                    "Lat"),
                         crs=4326) %>%
  st_transform(crs = 3414)

Plotting for reviewing childcare and CHAS

tmap_mode('view')
tm_shape(childcare_sf) +
  tm_dots(alpha = 0.4,
          col = "blue",
          size = 0.05) +
tm_shape(CHAS_sf) +
  tm_dots(alpha = 0.4,
          col = "red",
          size = 0.05)

Geospatial Data Wrangling

Converting frpm sf to Spatial* Classes

as_Spatial() of sf package.

childcare <- as_Spatial(childcare_sf)
CHAS <- as_Spatial(CHAS_sf)
mpsz <- as_Spatial(mpsz_sf)

Convert Spatial* dataframe into Spatial* objects

as.SpatialPoint() of as.SpatialPolygon() of maptools package

childcare_sp <- as(childcare, "SpatialPoints")
CHAS_sp <- as(CHAS, "SpatialPoints")
mpsz_sp <- as(mpsz, "SpatialPolygons")

Converting from Spatial* objecys into ppp objects

Using as.ppp() of maptools package,

childcare_ppp <- as(childcare_sp, "ppp")
CHAS_ppp <- as(CHAS_sp, "ppp")

Removing duplicate points using jitter

childcare_ppp_jit <- rjitter(childcare_ppp,
                             retry = TRUE,
                             nsim = 1,
                             drop = TRUE)
any(duplicated(childcare_ppp_jit))
[1] FALSE
CHAS_ppp_jit <- rjitter(CHAS_ppp,
                             retry = TRUE,
                             nsim = 1,
                             drop = TRUE)
any(duplicated(CHAS_ppp_jit))
[1] FALSE

Extracting Punggol Planning Area

pg <- mpsz[mpsz@data$PLN_AREA_N=="PUNGGOL",]

Converting SpatialPolygonsDataFrame into SpatialPolygons object

pg_sp <- as(pg, "SpatialPolygons")

Converting SpatialPolygons into owin object

pg_owin <- as(pg_sp, "owin")

Extracting spatial points within owin

childcare_pg <- childcare_ppp_jit[pg_owin]
CHAS_pg <- CHAS_ppp_jit[pg_owin]
plot(childcare_pg)

L-function

L_childcare <- envelope(childcare_pg,
                        Lest,
                        nsim=99,
                        rank=1,
                        global = TRUE)
Generating 99 simulations of CSR  ...
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98,  99.

Done.